package com.example.rocketmq.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * RocketMQ配置属性
 * 
 * @author demo
 */
@Data
@Component
@ConfigurationProperties(prefix = "rocketmq")
public class RocketMQProperties {

    /**
     * NameServer地址
     */
    private String namesrvAddr;

    /**
     * 生产者配置
     */
    private Producer producer = new Producer();

    /**
     * 消费者配置
     */
    private Consumer consumer = new Consumer();

    /**
     * 主题配置
     */
    private Topic topic = new Topic();

    @Data
    public static class Producer {
        /**
         * 生产者组
         */
        private String group;
        
        /**
         * 发送消息超时时间（毫秒）
         */
        private int sendMessageTimeout = 3000;
    }

    @Data
    public static class Consumer {
        /**
         * 消费者组
         */
        private String group;
        
        /**
         * 限流配置
         */
        private RateLimit rateLimit = new RateLimit();
    }

    @Data
    public static class RateLimit {
        /**
         * 每分钟消费消息数量
         */
        private int messagesPerMinute = 10;
        
        /**
         * 消费间隔（毫秒）- 用于进一步控制消费速率
         */
        private long consumeInterval = 1000;
        
        /**
         * 限流等待策略：true=等待到下一分钟，false=使用消费间隔控制
         */
        private boolean waitForNextMinute = true;
    }

    @Data
    public static class Topic {
        /**
         * 主题名称
         */
        private String name;
    }
}
